import json
import os
from functools import lru_cache
from typing import Dict, Any

# 获取 prompts 目录的绝对路径
PROMPTS_DIR = os.path.dirname(os.path.abspath(__file__))

@lru_cache(maxsize=128)
def _load_json_file(file_path: str) -> Dict[str, Any]:
    """从给定路径加载一个JSON文件。"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            return json.load(f)
    except (FileNotFoundError, json.JSONDecodeError) as e:
        # 在实际应用中，这里应该有更健壮的日志记录
        print(f"加载提示词文件失败 {file_path}: {e}")
        return {}

def get_prompt(category: str, name: str, language: str = "zh", default: str = "") -> str:
    """
    从JSON文件中检索一个特定的提示词。

    参数:
        category: 提示词的类别 (例如, 'summary', 'keywords')。
        name: 提示词的名称 (例如, 'concise', 'general')。
        language: 提示词的语言 ('zh' 或 'en')。
        default: 如果找不到提示词，则返回的默认字符串。

    返回:
        请求的提示词字符串。
    """
    file_path = os.path.join(PROMPTS_DIR, language, f"{category}.json")
    prompts = _load_json_file(file_path)
    return prompts.get(name, default)
